package main

import (
	"fmt"
	"io/ioutil"
	"os"
	"path/filepath"
)

func main() {
	//如果文件存在，则重新。如果不存在，则写如。跟其他语言，很像。可读写。
	file, _ := os.Create("test.txt")
	defer file.Close()
	file.WriteString("您好，世界1")
	//open 只能打开一个已经存在的文件,只读的方式。
	//该方法打开一个名称为name的文件，但是是只读方式，内部实现其实调用了OpenFile。
	file2, err := os.Open("open.txt")
	if err != nil {
		fmt.Print(err)
	}
	defer file2.Close()
	//file3, err := os.OpenFile("openfile.txt")
	copyFile("test.txt", "test2.txt")
	copyFile("07io.exe", "io.exe")

	//Dir  获取 当前的路径
	tmp := filepath.Dir("")
	fmt.Println(tmp)
	//创建目录
	os.Mkdir("test", 0777)

	files, err := ioutil.ReadDir(".")
	if err != nil {
		fmt.Println("path not exists")
	}
	for _, file := range files {
		//		file.
		if !file.IsDir() { //过滤出文件
			fmt.Println(file.Name())
		}
	}
}

//复制文件
func copyFile(source, dest string) {

	if source == dest {
		fmt.Println("soure equal dest")
	}
	in, err := os.Open(source)
	if err != nil {
		fmt.Println(err)
	}
	defer in.Close()
	out, err := os.Create(dest)
	if err != nil {
		fmt.Println(err)
	}
	defer out.Close()
	var tmp []byte
	in.Read(tmp)
	fmt.Println(tmp)
	//out.Write(in.Read())

	buf := make([]byte, 1024)
	for {
		n, _ := in.Read(buf)
		if 0 == n {
			break
		}
		//os.Stdout.Write(buf[:n])
		out.Write(buf[:n]) //buf[:n]而不是buf, 注意，n不能少。否则，末尾的时候会异常
	}
}
